﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web.UI.WebControls;

namespace BO
{
    public class ProdutoBO
    {
        #region Contrutores

        public ProdutoBO() 
        {
           
        }

        #endregion

        #region Leitores
        public static List<Produto> Listar(int vID, int vUnidadeMedidaID, string vDescricao)
        {
            try
            {
                ModeloContainer bco = new ModeloContainer();

                List<Produto> objs = (from a in bco.Produtoes where a.id == a.id select a).ToList();

                if (vID != 0)
                {
                    objs = (from a in objs where a.id == vID select a).ToList();
                }

                if (vUnidadeMedidaID != 0)
                {
                    objs = (from a in objs where a.unidadeMedidaID == vUnidadeMedidaID select a).ToList();
                }

                if (!string.IsNullOrEmpty(vDescricao.Trim()))
                {
                    objs = (from a in objs where a.descricao.ToLower().Contains(vDescricao.ToLower()) select a).ToList();
                }

                return objs;
            }
            catch (Exception)
            {
                
                throw;
            }
        }
        public static Produto Selecionar(int vID)
        {
            try
            {
                ModeloContainer bco = new ModeloContainer();

                Produto obj = bco.Produtoes.FirstOrDefault(x => x.id == vID);
                if (obj == null)
                    throw new Exception("Produto não localizado");
                else
                    return obj;
            }
            catch (Exception)
            {
                
                throw;
            }
        }
        #endregion

        #region Modificadores

        public static Produto Salvar(Produto obj, int userID)
        {
            try
            {
                var bco = new ModeloContainer();

                if (obj.id == 0)
                {
                    bco.Produtoes.AddObject(obj);
                    bco.SaveChanges();
                }
                else
                {
                    Produto objNovo = bco.Produtoes.FirstOrDefault(g => g.id == obj.id);

                    objNovo.unidadeMedidaID = obj.unidadeMedidaID;
                    objNovo.descricao = obj.descricao;
                    objNovo.valorUnitario = obj.valorUnitario;
                    objNovo.vlrReajusteExtra = obj.vlrReajusteExtra;
                    objNovo.vaiParaCozinha = obj.vaiParaCozinha;

                    bco.SaveChanges();
                }
                return obj;
            }

            catch (Exception)
            {
                throw;
            }
        }
        public static void Excluir(int id, int userID)
        {
            try
            {
                var bco = new ModeloContainer();

                Produto obj = bco.Produtoes.FirstOrDefault(g => g.id == id);

                if (obj != null)
                {
                    bco.Produtoes.DeleteObject(obj);
                    bco.SaveChanges();
                }
            }
            catch (Exception ex)
            {
                if (ex.Message.ToLower().Contains("constraint"))
                    throw new Exception("Impossivel realizar exclusão, pois há registros relacionados a este Produto!");
                else
                    throw new Exception("Deletar - " + ex.Message.ToString());
            }
        }
        #endregion
    }
}
